package com.nuanshui.framework.res.qiniu;

import com.nuanshui.framework.res.UploadRequest;
import com.qiniu.storage.Recorder;
import com.nuanshui.heatedloan.enums.FileBelong;
import com.nuanshui.framework.res.qiniu.module.QiniuCallBack;
import com.nuanshui.framework.res.qiniu.module.QiniuPersistentModule;
import com.nuanshui.framework.res.qiniu.module.TransFormModule;
import com.nuanshui.heatedloan.model.Image;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

public interface Qiniu {

	String SPLIT_SYMBOL = "|";

	/**
	 * 根据文件所属，获得空间名
	 * 
	 * @param belong
	 * @return
	 */
	String genBucketName(FileBelong belong);

	/**
	 * 根据文件所属，获得url头部.
	 *
	 * @param belong
	 * @return
	 */
	String genBucketSiteHost(FileBelong belong);

	/**
	 * 根据空间名获取上传授权凭证
	 * 服务端上传所用
	 * @param bucketName
	 * @return
	 */
	String genUpToken(String bucketName);
	
	
	/**
	 * 获取上传图片的token
	 * @return
	 */
	Map<String, Object> upToken();
	
	/**
	 * 视频的添加水印
	 * @param sourceKey
	 * @param targetKey
	 */
    void convertPostVideo(String sourceKey, String targetKey, String fops);
	
	/**
	 * 视频添加水印
	 * @param transFrom
	 */
    void transFormMedia(TransFormModule transFrom);
	
	/**
	 * 视频添加水印，七牛的回调
	 * @param persistentModule
	 * @return
	 */
    QiniuCallBack callBackOption(QiniuPersistentModule persistentModule);


	/**
	 * 上传图片
	 * @param request
	 * @return
	 * @throws Exception
	 */
	UpLoadFileResult uploadFile(UploadRequest request) throws Exception;


	/**
	 * 客户端上传，须获取token
	 * @param bucketName
	 * @return
	 */
	String genUpTokenForClient(String bucketName);

	/**
	 * 把七牛的key转换成本地数据库的key
	 * 
	 * @param qiniuKey
	 * @param bucketName
	 * @return
	 */
	String qiniuKeyToLocalKey(String qiniuKey, String bucketName);

    Image uploadImgWithUrl(String imgUrl);

    /**
     * 获取七牛服务器上的图片信息.
     * @param qiniuUrl
     * @return
     */
    Image genQiniuImageInfo(String qiniuUrl);
}
